

package modelos;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

import PPuente.AbstraccionListar;
import PPuente.ListarIngrdiente;


public class MIngrediente extends MDB implements MFabrica,AbstraccionListar{
 
    private String descripcion;
    private float precio, stock;

    public MIngrediente() {
        super();
    }
    
    @Override
    public boolean registrar(){
        abrir();
        boolean sw = false;
        String sql="INSERT INTO Ingrediente (codigo, descripcion, precio, stock, estatus) VALUES(?,?,?,?,?)";
        PreparedStatement stam = crearPreparedStatement(sql);
        try {
            stam.setInt(1, getCodigo());
            stam.setString(2, getDescripcion().toUpperCase());
            stam.setFloat(3, getPrecio());
            stam.setFloat(4, getStock());
            stam.setString(5, getEstatus());
            stam.executeUpdate();
            sw = true;
        } catch (SQLException ex) {
            Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        cerrar();
        return sw;
    }
    
    @Override
 public boolean eliminar(){
     return eliminar("Ingrediente");
 }
    
    @Override
  public boolean actualizar(){
     abrir();
     boolean sw = false;
     String sql="UPDATE Ingrediente SET descripcion =?, precio=?, stock=? WHERE codigo=?  AND estatus = 'A'";
     PreparedStatement stam = crearPreparedStatement(sql);
     try {
         stam.setString(1,getDescripcion().toUpperCase());
         stam.setFloat(2, getPrecio());
         stam.setFloat(3, getStock());
         stam.setInt(4, getCodigo());
         stam.executeUpdate();
         sw = true;
     } catch (SQLException ex) {
            Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
     }
     cerrar();
     return sw;
 }
    
    @Override
  public boolean  consultar(){
    abrir();
    boolean sw = false;
    String sql="SELECT * FROM Ingrediente WHERE codigo=? AND estatus='A'";
    PreparedStatement stam = crearPreparedStatement(sql);
    try {
        stam.setInt(1, getCodigo());
        rs= stam.executeQuery();
        if (rs.next()){
            sw = true;
            setDescripcion(rs.getString("descripcion"));
            setCodigo(rs.getInt("codigo"));
            setPrecio(rs.getFloat("precio"));
            setEstatus(rs.getString("estatus"));
            setStock(rs.getFloat("stock"));
         }
    } catch (SQLException ex) {
        Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
    }
    cerrar();
    return sw;
  }

    @Override
  public Vector<? extends MDB> listar(){
    Vector<MDB> v = new Vector<MDB>();
    new ListarIngrdiente().listar(v);    
    return v;
  }

  public Vector<String> listarProdcutosVendidos(){
    Vector<String> v = new Vector<String>();
    String sql="select Producto.descripcion from  Producto,IngrProd,Ingrediente where Ingrediente.estatus='A' and IngrProd.estatus='A' and Producto.estatus='A' AND Ingrediente.codigo=IngrProd.cod_ingrediente AND Producto.codigo=IngrProd.cod_producto AND Ingrediente.codigo=?";
    abrir();
    PreparedStatement stmn = crearPreparedStatement(sql);
    try {
        stmn.setInt(1, getCodigo());
        rs= stmn.executeQuery();
        while (rs.next())
            v.add(rs.getString(1));
    } catch (SQLException ex) {
        Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
    }
    cerrar();
    return v;
  }
  
  public boolean disponibilidad(float porcion){
      consultar();
      if((getStock()-porcion)>0)
          return true;
      else
          return false;
  }

  public void actualizarStock(){
       abrir();
       String sql="UPDATE Ingrediente SET stock=? WHERE codigo=?  AND estatus = 'A'";
       PreparedStatement stam = crearPreparedStatement(sql);
       try {
           stam.setFloat(1, getStock());
           stam.setInt(2, getCodigo());
           stam.execute();
       } catch (SQLException ex) {
           Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
       }
       cerrar();
  }
  
  public String getDescripcion() {
        return descripcion;
  }

  public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
  }

  public float getPrecio() {
        return precio;
  }

  public void setPrecio(float precio) {
        this.precio = precio;
  }

  public float getStock() {
        return stock;
  }

    public void setStock(float stock) {
        this.stock = stock;
    }

}
